package demo;

public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode node=new ListNode(0);//虚拟一个结果的头结点
        ListNode cur=node;
        int carry=0;//代表仅进位制
        while(l1!=null||l2!=null||carry!=0){
//要先取到对应位置链表的值（此位置有可能为空，因此不能直接l1.val和l2.val）
//若为空则用0直接代替
            int l1Val= l1==null?0:l1.val;
            int l2Val= l2==null?0:l2.val;


            int sum=l1Val+l2Val+carry;
            int num=sum%10;
            carry=sum/10;

            ListNode ansNode=new ListNode(num);
            cur.next=ansNode;
            cur=ansNode;
//哪条链表不为空则哪条继续往下走
            if(l1!=null){
                l1=l1.next;

            }
            if(l2!=null){
                l2=l2.next;

            }
        }
        //返回的是虚拟结果头结点的下一个结点
        return node.next;
    }
}